package cn.doitedu.operate

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.{DataFrame, SparkSession}

/**
 * @Date 22.4.10
 * @Created by HANGGE
 * @Description
 */
object C05_DSL_GroupBy {
  Logger.getLogger("org").setLevel(Level.ERROR)
  def main(args: Array[String]): Unit = {
    // 1 获取会话
    val session = SparkSession.builder()
      .appName(this.getClass.getSimpleName)
      .master("local[*]")
      .getOrCreate()
     // 导入SQL函数和隐式
    import session.implicits._
    // 具有丰富的操作字段的函数
    // 2 加载数据   创建DataFrame
    val df: DataFrame = session.read.option("header" , true).option("inferSchema",true).csv("file:///D://code/doit30_spark_sql/data/csv/Teacher2.csv")
    // 分组聚合
    df.groupBy("gender").count().show()
    df.groupBy("gender").avg("sal").toDF("gender" ,"avg_sal").show()
    df.groupBy("gender").max("sal").show()
    df.groupBy("gender").min("sal").show()
    df.groupBy("gender").sum("sal").show()

    // 分组聚合
    // agg的参数 可以是对偶元组 , 对某个字段做聚合操作
    df.groupBy("gender").agg(("sal","max") ,("sal","avg")).show()
    df.groupBy("gender").agg("sal"->"max" ,("sal","avg")).show()

  }

}
